import { ExtractPropTypes } from 'vue'
import { validatorColorValue } from '../../utils'
import { UPDATE_MODEL_EVENT } from '../../constants'

export type WeekCalendarData = {
  day: string | number,
  content: string
}

/**
 * Props参数
 */
export const weekCalendarProps = {
  /** 当前选中的日期的日, 如果为0则是当天 */
  modelValue: {
    type: [String, Number],
    default: 0
  },
  /** 数据对应的年份, 如果为空则当前年 */
  year: {
    type: [String, Number],
    default: ''
  },
  /** 数据对应的月份, 如果为空则当前月 */
  month: {
    type: [String, Number],
    default: ''
  },
  /** 对应日期的日描述数据 */
  dateData: {
    type: Array,
    default: (): WeekCalendarData[] => {
      return []
    }
  },
  /** 字体颜色, 支持内置颜色的值、十六进制、rgb()、rgba()的值 */
  color: {
    type: String,
    default: '',
    validator: (value: string) => {
      return validatorColorValue('color', value)
    }
  },
  /** 激活时字体颜色, 支持内置颜色的值、十六进制、rgb()、rgba()的值 */
  activeColor: {
    type: String,
    default: '',
    validator: (value: string) => {
      return validatorColorValue('color', value)
    }
  },
  /** 激活时背景颜色, 支持内置颜色的值、十六进制、rgb()、rgba()的值 */
  activeBgColor: {
    type: String,
    default: '',
    validator: (value: string) => {
      return validatorColorValue('bg', value)
    }
  }
}
export type WeekCalendarProps = ExtractPropTypes<typeof weekCalendarProps>

export const weekCalendarEmits = {
  [UPDATE_MODEL_EVENT]: (val: number) => typeof val === 'number',
  'week-change': (val: number) => typeof val === 'number',
  change: (val: number) => typeof val === 'number'
}
export type WeekCalendarEmits = typeof weekCalendarEmits
